﻿#region Using

using SAPbouiCOM;
using SapFramework.Interface.Controls.Items.Base;
using SapFramework.Interface.Events;

using Form = SapFramework.Interface.Controls.Forms.Base.Form;
using Item = SapFramework.Interface.Controls.Items.Base.Item;

#endregion

namespace SapFramework.Interface.Controls.Items.Specific
{
    /// <summary>
    /// Realiza o encapsulamento de um objeto do tipo <see cref="SAPbouiCOM.CheckBox"/> da UI API do SAP Business One
    /// </summary>
    public sealed class CheckBox : Item, SAPbouiCOM.CheckBox
    {
        #region Eventos

        /// <summary>
        /// Evento disparado quando o botão principal do mouse foi clicado duas vezes sobre um item, mas nenhuma ação foi tomada ainda.
        /// </summary>
        [Event( BoEventTypes.et_DOUBLE_CLICK )]
        public event EventBoolItem OnBeforeDoubleClick;

        /// <summary>
        /// Evento disparado quando o botão principal do mouse foi clicado duas vezes sobre um item, e qualquer ação do SBO já foi realizada.
        /// </summary>
        [Event( BoEventTypes.et_DOUBLE_CLICK )]
        public event EventVoidItem OnAfterDoubleClick;

        /// <summary>
        /// Evento disparado quando o botão do mouse foi liberado em cima de um item, ou seja, quando o botão do mouse está em cima, mas nenhuma ação foi tomada ainda.
        /// </summary>
        /// <remarks>
        /// Usado para a marcação da CheckBox
        /// </remarks>
        [Event( BoEventTypes.et_ITEM_PRESSED )]
        public event EventBoolItem OnBeforeItemPressed;

        /// <summary>
        /// Evento disparado quando o botão do mouse foi liberado em cima de um item, ou seja, quando o botão do mouse está em cima, e qualquer ação do SBO já foi realizada.
        /// </summary>
        /// <remarks>
        /// Usado para a marcação da CheckBox
        /// </remarks>
        [Event( BoEventTypes.et_ITEM_PRESSED )]
        public event EventVoidItem OnAfterItemPressed;

        /// <summary>
        /// Ação executada ao ser pressionado uma tecla sobre o item, mas antes de o SBO realizar qualquer tratamento.
        /// </summary>
        [Event( BoEventTypes.et_KEY_DOWN )]
        public event EventBoolItem OnBeforeKeyDown;

        /// <summary>
        /// Ação executada ao ser pressionado uma tecla sobre o item, e após o SBO realizar seus tratamentos.
        /// </summary>
        [Event( BoEventTypes.et_KEY_DOWN )]
        public event EventVoidItem OnAfterKeyDown;

        #endregion

        /// <summary>
        /// Guarda uma referencia para a parte específica do item
        /// </summary>
        private readonly SAPbouiCOM.CheckBox mCheckBox;

        /// <summary>
        /// Construtor
        /// </summary>
        /// <param name="aForm">O formulário ao qual o item pertence</param>
        /// <param name="aItemUniqueId">Id único do Item do Form do SAP Business One</param>
        public CheckBox( Form aForm, string aItemUniqueId ) : base( aForm, aItemUniqueId, BoFormItemTypes.it_CHECK_BOX )
        {
            mCheckBox = mItem.Specific as SAPbouiCOM.CheckBox;
        }

        #region Implementation of ICheckBox

        /// <summary>
        /// Indica se o componente está marcado ou não.
        /// </summary>
        public bool Checked
        {
            get { return mCheckBox.Checked; }
            set { mCheckBox.Checked = value; }
        }

        /// <summary>
        /// Referência para o objeto <see cref="DataBind"/>, que realiza uma ligação com um:
        /// <list type="bullet">
        /// <see cref="UserDataSource"/>
        /// <see cref="DBDataSource"/>
        /// <see cref="DataTable"/>
        /// </list>
        /// </summary>
        /// <see cref="DataBind"/>
        public DataBind DataBind
        {
            get { return mCheckBox.DataBind; }
        }

        /// <summary>
        /// Texto da CheckBox
        /// </summary>
        public string Caption
        {
            get { return mCheckBox.Caption; }
            set { mCheckBox.Caption = value; }
        }

        /// <summary>
        /// Informa o valor que é utilizado para indicar que a CheckBox está marcada
        /// </summary>
        public string ValOn
        {
            get { return mCheckBox.ValOn; }
            set { mCheckBox.ValOn = value; }
        }

        /// <summary>
        /// Informa o valor que é utilizado para indicar que a CheckBox está desmarcada
        /// </summary>
        public string ValOff
        {
            get { return mCheckBox.ValOff; }
            set { mCheckBox.ValOff = value; }
        }

        #endregion
    }
}